package org.jeecg.modules.coursearrangeatom.service;

import com.alibaba.fastjson.JSONArray;
import io.swagger.annotations.ApiOperation;
import org.apache.ibatis.annotations.Param;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.modules.coucoursearrange.entity.CouCourseArrange;
import org.jeecg.modules.coursearrangeatom.entity.CouCourseArrangeAtom;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.coursearrangeatom.vo.CouCourseArrangeAtomAllProVo;
import org.jeecg.modules.coursearrangeatom.vo.CouCourseArrangeAtomVo;
import org.jeecg.modules.coursearrangeatom.vo.CouCourseArrangeOneTableVo;
import org.jeecg.modules.coursearrangeatom.vo.ViewCouCourseArrAtomVo;
import org.jeecg.modules.courseschetemplate.entity.CouCoursescheduleTemplate;
import org.springframework.web.bind.annotation.GetMapping;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * @Description: cou_course_arrange_atom
 * @author: baochangrong
 * @Date:   2022-02-23
 * @Version: V1.0
 */
public interface ICouCourseArrangeAtomService extends IService<CouCourseArrangeAtom> {


    /**课表科目数据查询 */
    List<CouCourseArrangeAtom> getCourseDataList(String courseArrangeId,String targetObjId,Integer relObjTtype,String selectTeacherIds);
    List<CouCourseArrangeAtomVo> getArrangeAtomByObjId(CouCourseArrangeAtomVo couCourseArrangeAtomVo);
    /**冲突检测页 教师个人课表 */
    List<CouCourseArrangeAtomVo> getArrangeAtomByObjId(CouCourseArrangeAtomVo couCourseArrangeAtomVo,int checkContradiction);


    /**
     * 通过视图 ===
     * 课表详情查询 listByCourseArrangeId
     */
    List<ViewCouCourseArrAtomVo> listByCourseArrangeId(ViewCouCourseArrAtomVo viewCouCourseArrAtomVo, Map<String,String> queryParam);

    /* 全校全年级1张课表：查询同一时间上课的班级、老师、教室、科目,显示在1节课的位置
     * 需求：查询全校同时在上体育课的班级数量，判断操场是否够用，查询同时在上语文课的老师找到最少课的时间开展教研活动或开学科会议
     * 扩展需求：查询某教室同时使用的班级数量，查询某老师同时上课的班级数量
     * 查询单科全校课表：查询全年级的语文课、查询全年级的体育课，得到1张课表
     * 查询全校课表：查询全年级没课的班级、查询全年级在上体育课的班级，得到1张课表
     *  */
    List<CouCourseArrangeOneTableVo> queryCouArrangeAtomByObjectType(CouCourseArrangeAtomAllProVo couCourseArrangeAtomAllPro,Map<String,String> queryParam);

    /**
     * 查询全校各班级课表：查询各个班级的课表，得到N个班级的N张课表
     * @return
     */
    List<CouCourseArrangeAtomAllProVo> queryCouArrangeAtomByGradeIdsOrClassIds(@Param("couCourseArrangeAtomAllPro") CouCourseArrangeAtomAllProVo couCourseArrangeAtomAllPro,Map<String,String> queryParam);

    /**
     * 用任意模板得到初始化的课表详情--得到课表样式结构
     * @param coursescheduleTemplateId
     * @return
     */
    List<CouCourseArrangeAtom> getNewCouCourseArrangeAtomByCourscheTemplate(@Param("coursescheduleTemplateId") String coursescheduleTemplateId);

    /**
     * 用主课表中配置的课表模板得到初始化的课表详情--得到课表样式结构
     * @param couCourseArrange
     * @return
     */
    List<CouCourseArrangeAtom> getNewCouCourseArrangeAtomByCouCourseArrange(@Param("couCourseArrange") CouCourseArrange couCourseArrange);

    List<CouCourseArrangeAtom> getNewTeacherByCouCourseArrange(@Param("couCourseArrange") CouCourseArrange couCourseArrange);
    List<CouCourseArrangeAtom> getNewClassroomByCouCourseArrange(@Param("couCourseArrange") CouCourseArrange couCourseArrange);

}
